### 第07课 红外接收原理及应用


#### 7.1 项目介绍：

本教程将为您详细介绍红外接收模块与红外遥控器的使用方法和应用技巧。红外遥控在我们的日常生活中非常常见，比如家里的电视、空调、音响等设备，大多都使用红外遥控器来控制。那么，它是如何工作的呢？

#### 7.2 元件知识： 

红外遥控系统主要由两部分组成：红外发射端（也就是我们手中的遥控器）和红外接收端（安装在4WD智能车上的红外接收模块）。 

![](../../img/image31.jpg)

当你按下遥控器上的按键时，遥控器内部的芯片会将这个按键信息编码成一串特殊的信号。这串信号通过红外线发射管发射出去。这种红外信号是一种频率为 38KHz 的载波信号，它由“引导码”、“用户码”、“数据码”和“数据反码”组成。简单来说，就是利用脉冲时间的长短来表示数字“0”和“1”。

![](../../img/image32.png)

在本课中，我们将使用一个红外接收模块。这个模块内部集成了接收、放大和解调功能。它能把接收到的微弱红外光信号转换成单片机（如 Arduino）能识别的数字电信号（TTL电平）。这个模块只有三个引脚：信号输出（S）、电源正极（VCC）和电源负极（GND），连接非常方便。

当 Arduino 接收到这些数字信号后，通过程序进行解码，就能知道我们按下了遥控器上的哪个键，从而执行相应的操作。

**红外接收模块的参数：**

- 工作电压：3.3V - 5V（直流电）

- 接口类型：3PIN 接口（S, V, G）

- 输出信号：数字信号

- 接收角度：约 90 度

- 载波频率：38kHz

- 有效距离：约 10 米（视环境光线而定）

#### 7.3 项目组件：

| 组装好的智能车(<span style="color: rgb(255, 76, 65);">未插上蓝牙模块</span>) *1 | 草帽LED白发红模块 *1 | 3Pin 双母头杜邦线 *1  |
| --- | --- | --- |
| ![](../../img/image4.png) | ![](../../img/image3.png)|![](../../img/image9.jpg) |
| USB线 *1 | 5号(1.5V)电池 *6（电池自备） | 红外遥控器 |
| ![](../../img/image8.png)| ![](../../img/image11.png) | ![](../../img/image33.png) |

#### 7.4 接线图：

⚠️ 特别注意：4WD智能车已经组装好了，这里不需要把红外接收模块拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码！

| 红外接收模块 | 电机驱动扩展板 | 
| :--: | :--: | 
| GND | G |
| VCC | 5V |
| S | A1 | 

![](../../img/image34.png)

⚠️ <span style="color: rgb(255, 76, 65);">**特别注意：**</span>

- 接线时请确保电源断开(拔掉Arduino主控板上的USB线或将电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**OFF**</span>” 端)，避免短路。

- 电源连接：电池盒电源接到电机驱动扩展板的 BAT 接口（注意正负极不要接反），端口正反面，请勿反插，否则会损坏端口。

- 电池正负极切勿接反，否则可能烧毁电机驱动扩展板。

- 电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**ON**</span>” 端。

#### 7.5 实例代码1：读取遥控器按键的值

⚠️ <span style="color: rgb(255, 76, 65);">**重要提示：**</span>

- <span style="color: rgb(172, 57, 255);">**上传示例代码前，请务必拔掉蓝牙模块！ 因为蓝牙模块也占用Arduino的串口通信（TX/RX），如果不拔掉，示例代码上传会失败。**</span>
   
![](../../img/kidsblock_test6_1.png)

#### 7.6 项目结果1：

⚠️ <span style="color: rgb(255, 76, 65);">**重要提示：**</span>

- <span style="color: rgb(172, 57, 255);">**上传示例代码前，请务必拔掉蓝牙模块！ 因为蓝牙模块也占用Arduino的串口通信（TX/RX），如果不拔掉，示例代码上传会失败。**</span>

外接电源，将电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**ON**</span>” 端，上电后。选择好正确的设备（Keyes 4WD Robot）和 对应的端口（COMxx），然后单击 ![upload](../../img/upload.png) 按钮上传示例代码至Arduino控制板。

代码上传成功后，单击Mixly IDE左上角的![](../../img/Sarial1.png)，出现串口监视器窗口，设置串口波特率为 9600。，拿起红外遥控器，对准红外接收模块，按下任意按键。

<span style="color: rgb(255, 76, 65);">**特别提醒：**</span> 使用红外遥控器之前，需要将红外遥控器上的透明塑料卡片抽掉。

![](../../img/WAX11.png)

此时，你会在串口监视器中看到一串十六进制的代码。这就是该按键对应的“键值”。

![](../../img/image35_1.png)

<span style="color: rgb(255, 76, 65);">**注意：如果长时间按住按键不放，可能会收到重复的代码或乱码（通常是FFFFFFFF），这是正常的。请短促按压按键进行测试。**</span>

为了方便后续使用，我们将常用按键的键值记录下来，形成如下对照表：

![](../../img/image36.png)

#### 7.7 示例代码2：红外控制LED

既然我们已经知道了每个按键对应的数值，我们就可以用这些数值来控制其他设备了。比如，我们用遥控器的“OK”键来控制一个 LED 灯的亮和灭。

**硬件连接：**

⚠️ 特别注意：4WD智能车已经组装好了，这里不需要把红外接收模块拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码！但是，LED模块是需要你自己接线的。

| 红外接收模块 | 电机驱动扩展板 | 
| :--: | :--: | 
| GND | G |
| VCC | 5V |
| S | A1 | 

| LED 模块 | 电机驱动扩展板 | 
| :--: | :--: | 
| GND | G |
| VCC | 5V |
| S | S(D9) |

![](../../img/image37.png)

⚠️ <span style="color: rgb(255, 76, 65);">**特别注意：**</span>

- 接线时请确保电源断开(拔掉Arduino主控板上的USB线或将电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**OFF**</span>” 端)，避免短路。

- 电源连接：电池盒电源接到电机驱动扩展板的 BAT 接口（注意正负极不要接反），端口正反面，请勿反插，否则会损坏端口。

- 电池正负极切勿接反，否则可能烧毁电机驱动扩展板。

- 电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**ON**</span>” 端。

⚠️ <span style="color: rgb(255, 76, 65);">**重要提示：**</span>

- <span style="color: rgb(172, 57, 255);">**上传示例代码前，请务必拔掉蓝牙模块！ 因为蓝牙模块也占用Arduino的串口通信（TX/RX），如果不拔掉，示例代码上传会失败。**</span>

![](../../img/kidsblock_test6_2.png)

#### 7.8 项目结果2：

⚠️ <span style="color: rgb(255, 76, 65);">**重要提示：**</span>

- <span style="color: rgb(172, 57, 255);">**上传示例代码前，请务必拔掉蓝牙模块！ 因为蓝牙模块也占用Arduino的串口通信（TX/RX），如果不拔掉，示例代码上传会失败。**</span>

外接电源，将电机驱动扩展板上的拨码开关拨到 “<span style="color: rgb(255, 76, 65);">**ON**</span>” 端，上电后。选择好正确的设备（Keyes 4WD Robot）和 对应的端口（COMxx），然后单击 ![upload](../../img/upload.png) 按钮上传示例代码至Arduino控制板。

代码上传成功后，单击Mixly IDE左上角的![](../../img/Sarial1.png)，出现串口监视器窗口，设置串口波特率为 9600。尝试按下遥控器上的 **OK** 键，你会发现 LED 灯会随着你的按键在亮和灭之间切换。同时，串口监视器也会显示对应的键值。

![](../../img/A17.gif)

#### 7.9 代码说明：

![](../../img/0110-0.png)

- 设置一个全局变量item，类型为整数，赋值为0。

![](../../img/0110-12.png)

- 初始化红外接收引脚。

![](../../img/0110-13.png)

- 不断检查是否有新的红外信号被接收并解码成功。如果成功，将解码后的数据以按键的具体键值，我们使用 `HEX` 参数将其以十六进制形式显示，这样更简洁易读。

- 串口打印红外遥控器的按键值，并且不断地帅鑫红外接收数据。

![](../../img/0110-14.png)

- 按下“OK”键，LED点亮；再次按下“OK”键，LED熄灭；...... 循环。